package com.sjms._07_结构_装饰者模式;

/**
 * 测试类【之】煎饼果子来一套
 * <p>
 * 不改变原有对象的基础上，强化已经存在的功能
 * 被装饰者与装饰者实现同一个抽象或接口
 * 装饰后，最终还是调用同名方法，只不过运行时会被动态修饰
 * <p>
 * 实现流程
 * 1.装饰者与被装饰者实现同一个 抽象或接口
 * 2.装饰者内部组合被装饰者
 * 3.装饰者实现类，调用被装饰这的原方法后，进行逻辑扩展
 * <p>
 * 举例：
 *
 * <p>
 * * 源码应用：InputStream
 */
public class _Test {

    public static void main(String[] args) {

        //
        APizza pizza = new ChinesePizza();
        System.out.println(pizza.food() + " : " + pizza.price());

        //
        APizza adChang = new DecorateAddChang(pizza);
        System.out.println(adChang.food() + " : " + adChang.price());

        //
        APizza addDan = new DecorateAddDan(adChang);
        System.out.println(addDan.food() + " : " + addDan.price());

        //
        //
        APizza 反复装饰 = new DecorateAddChang(new DecorateAddDan(new DecorateAddDan(pizza)));
        System.out.println(反复装饰.food() + " : " + 反复装饰.price());

    }

}
